package es.supermanager;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.sql.SQLException;

import javax.swing.text.BadLocationException;
import javax.swing.text.EditorKit;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;

import org.apache.http.util.ByteArrayBuffer;

public class PartidoNuevoParser {
	
	private String equipo1, equipo2;
	private int partido;
	
	public PartidoNuevoParser (int partido) {
		this.partido = partido;
		leerEquipos();
		
		try {
			Consultas consultas = new Consultas();
			consultas.crearConexion();
			if (!consultas.existePartido(partido))
					leerJS();
			consultas.cierraConexion();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void actualizar () {
		String str, texto = "";
		String apellido;
		int indice = 0, fin = 0;
		int [] puntos = new int[24];
		int [] rebotes = new int[24];
		int [] faltas = new int[24];
		int [] valoracion = new int[24];
		int puntos1 = 0, puntos2 = 0;
		boolean bonus;
		
		try {
			URL url = new URL("http://jornadavirtual.acb.com/js/resumen/r"+partido+".js");
			URLConnection c = url.openConnection();
			
			InputStream is = c.getInputStream();
			BufferedInputStream bis = new BufferedInputStream(is);
				ByteArrayBuffer baf = new ByteArrayBuffer(1500);
			int current = 0;
			while ((current = bis.read()) != -1) {
				baf.append((byte) current);
			}
				texto = new String(baf.toByteArray());
				
			texto = limpiarJS(texto);
//			System.out.println(texto);
			
			BufferedReader reader = new BufferedReader(
		    	new StringReader(texto));

			int i=0;

			Consultas consultas = new Consultas();
			consultas.crearConexion();
			
			while ((str=reader.readLine()) != null) {
//		    	if (str.length()==0) continue;
				
				if (str.startsWith("j1")) {
					while (!(str=reader.readLine()).startsWith("p1")) {
						if (str.length()==0) continue;
						if (Character.isDigit(str.charAt(1))) {
//							System.out.println("Cadena: "+str);
//							System.out.println("Substring: "+str.substring(3));
							
							str = str.substring(3);
							if(str.startsWith(" ")) apellido = str.substring(1);
							else apellido = str;
//							System.out.println("Apellido: "+apellido);
//							consultas.registrarJugador(i,apellido, equipo1, partido);
							i++;
						}
					}
				}
				
				indice = i;
				
				puntos1 = Integer.valueOf(reader.readLine());
				i=0;
				while (!(str=reader.readLine()).startsWith("r1")) {
					if (str.length()==0) continue;
					if (Character.isDigit(str.charAt(0))) {
						puntos[i] = Integer.valueOf(str);
						i++;
					}
				}

				reader.readLine();
				i=0;
				while (!(str=reader.readLine()).startsWith("f1")) {
					if (str.length()==0) continue;
					if (Character.isDigit(str.charAt(0))) {
						rebotes[i] = Integer.valueOf(str);
						i++;
					}
				}

				reader.readLine();
				i=0;
				while (!(str=reader.readLine()).startsWith("v1")) {
					if (str.length()==0) continue;
					if (Character.isDigit(str.charAt(0))) {
						faltas[i] = Integer.valueOf(str);
						i++;
					}
				}

				reader.readLine();
				i=0;
				while (!(str=reader.readLine()).startsWith("j2")) {
					if (str.length()==0) continue;
					if (Character.isDigit(str.charAt(0)) || str.charAt(0)=='-') {
						valoracion[i] = Integer.valueOf(str);
						i++;
					}
				}
				
				// Segundo equipo
				i=indice;
				while (!(str=reader.readLine()).startsWith("p2")) {
					if (str.length()==0) continue;
					if (Character.isDigit(str.charAt(1))) {
//						System.out.println(str);
						apellido = str.substring(3);
//						consultas.registrarJugador(i,apellido, equipo2, partido);
						i++;
					}
				}
				
				fin = i;

				puntos2 = Integer.valueOf(reader.readLine());
				i=indice;
				while (!(str=reader.readLine()).startsWith("r2")) {
					if (str.length()==0) continue;
					if (Character.isDigit(str.charAt(0))) {
						puntos[i] = Integer.valueOf(str);
						i++;
					}
				}
	
				reader.readLine();
				i=indice;
				while (!(str=reader.readLine()).startsWith("f2")) {
					if (str.length()==0) continue;
					if (Character.isDigit(str.charAt(0))) {
						rebotes[i] = Integer.valueOf(str);
						i++;
					}
				}
	
				reader.readLine();
				i=indice;
				while (!(str=reader.readLine()).startsWith("v2")) {
					if (str.length()==0) continue;
					if (Character.isDigit(str.charAt(0))) {
						faltas[i] = Integer.valueOf(str);
						i++;
					}
				}
	
				reader.readLine();
				i=indice;
				while ((str=reader.readLine()) != null) {
					if (str.length()==0) continue;
					if (Character.isDigit(str.charAt(0)) || str.charAt(0)=='-') {
						valoracion[i] = Integer.valueOf(str);
						i++;
					}
				}				
			}
			
			if (puntos1 >= puntos2) bonus = true;
			else bonus = false;
			
			for (i=0; i<indice; i++) {
				consultas.actualizarJugador(this.partido, i, puntos[i], rebotes[i], faltas[i], valoracion[i], bonus);
			}
			
			for (i=indice; i<fin; i++) {
				consultas.actualizarJugador(this.partido, i, puntos[i], rebotes[i], faltas[i], valoracion[i], !bonus);
			}
			i--;
			consultas.actualizarJugador(this.partido, i, puntos[i], rebotes[i], faltas[i], valoracion[i], !bonus);

			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public void leerEquipos () {

		String texto = new String();
		String nuevo = new String("");
		String str;
		BufferedReader reader;
	
		try {

			URL url = new URL("http://jornadavirtual.acb.com/htm/resumen/r"+partido+".htm");
			URLConnection c = url.openConnection();
			
			InputStream is = c.getInputStream();
		    EditorKit ek = new HTMLEditorKit();

		    HTMLDocument doc = (HTMLDocument) ek.createDefaultDocument();
		    doc.putProperty("IgnoreCharsetDirective", true);
		    
		    InputStreamReader isr = new InputStreamReader(is);
//		    System.out.println("Encoding: " + isr.getEncoding());
		    ek.read(new BufferedReader(isr), doc, 0);

		    texto = doc.getText(0, doc.getLength());

			reader = new BufferedReader(new StringReader(texto));
		      
			Consultas consultas = new Consultas();
			consultas.crearConexion();

			while ((str=reader.readLine()) != null) {
				if (str.length()<2) continue;
				if (str.startsWith("Minuto y Resultado")) {
					for (int i=0; i<10; i++)
						reader.readLine();
					equipo1 = consultas.buscarEquipo(reader.readLine());
					equipo2 = consultas.buscarEquipo(reader.readLine());
				}
			}

		} 
		catch (IOException e) {
			e.printStackTrace();
		} catch (BadLocationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

	public void leerJS () {
		
		String str, texto = "";
		String apellido, nombre;
		
		try {
		
			URL url = new URL("http://jornadavirtual.acb.com/js/resumen/r"+partido+".js");
			URLConnection c = url.openConnection();
			
			InputStream is = c.getInputStream();
			BufferedInputStream bis = new BufferedInputStream(is);

			ByteArrayBuffer baf = new ByteArrayBuffer(1500);
			int current = 0;
			while ((current = bis.read()) != -1) {
				baf.append((byte) current);
			}

			texto = new String(baf.toByteArray());

			
			/*
			BufferedReader bf = new BufferedReader(new FileReader("C:\\Users\\Pablo\\Desktop\\supermanager\\resumen.js"));
			
			while ((str = bf.readLine())!=null) {
				texto = texto + str + '\n';
			}
*/			
			texto = limpiarJS(texto);
//			System.out.println(texto);
			
		    BufferedReader reader = new BufferedReader(
			    	new StringReader(texto));

		    Consultas consultas = new Consultas();
		    consultas.crearConexion();
		    
		    int i=0;
		    
		    while ((str=reader.readLine()) != null) {

//		    	if (str.length()==0) continue;
		    	
		    	if (str.startsWith("j1")) {
//		    		System.out.println(str);		    	
		    		while (!(str=reader.readLine()).startsWith("p1")) {
		    			if (str.length()==0) continue;
		    			if (Character.isDigit(str.charAt(1))) {
//		    				System.out.println(str);
		    				str = str.substring(3);
//		    				System.out.println("Apellido "+apellido);
							if(str.startsWith(" ")) apellido = str.substring(1);
							else apellido = str;
		    				consultas.registrarJugador(i,apellido, equipo1, partido);
		    				i++;
		    			}
		    		}
		    	}
	
		    	if (str.startsWith("j2")) {
		    		while (!(str=reader.readLine()).startsWith("p2")) {
		    			if (str.length()==0) continue;
		    			if (Character.isDigit(str.charAt(1))) {
//		    				System.out.println(str);
		    				str = str.substring(3);
							if(str.startsWith(" ")) apellido = str.substring(1);
							else apellido = str;
		    				consultas.registrarJugador(i,apellido, equipo2, partido);
		    				i++;
		    			}
		    		}
		    	}
		    	

		    }

		    //			System.out.println(texto);
//			parsearJS(texto);
			
//			for (int i=0; i<24; i++) {
//				if (apellidos[i]==null) break;
//				buscarJugador(i, bases, "bases");
//				buscarJugador(i, aleros, "aleros");
//				buscarJugador(i, pivots, "pivots");
//				
//			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
//		System.out.println(texto);

	}
	
	public String limpiarJS (String texto) {
		
		String nuevo = new String("");
		String str;
		int i;
		
		texto = texto.replace("\t", "");
		texto = texto.replace("set_array(", "");
		texto = texto.replace("*", "");
//		texto = texto.replace(", ", ",");	// No lo hace
//		texto = texto.replace(",,", " ");  	// No lo hace
		texto = texto.replace("'", "");
		texto = texto.replace(");", "");
		texto = texto.replace("}", "");
		
		BufferedReader reader = new BufferedReader(
	    	new StringReader(texto));
	    
	    try {
	    	reader.readLine();
	    	reader.readLine();
			while ((str=reader.readLine()) != null) {
				nuevo = nuevo + str + '\n';
			}
			
						
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		nuevo = nuevo.replace(",", "\n");
//		System.out.println(nuevo);
//		nuevo = nuevo.replace(" ", "");
//		System.out.println(nuevo);
		
		return nuevo;
				
	}

	
	
	
}
